using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._MaritimeTools
{
    /// <summary>
    /// <para>Smooth Bathymetric TIN</para>
    /// <para>Smooths a triangulated irregular network (TIN) dataset in a manner that strictly preserves a shallow bias.</para>
    /// <para>以严格保留浅偏差的方式平滑三角化不规则网络 （TIN） 数据集。</para>
    /// </summary>    
    [DisplayName("Smooth Bathymetric TIN")]
    public class SmoothBathymetricTIN : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public SmoothBathymetricTIN()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_tin">
        /// <para>Input TIN</para>
        /// <para>The input TIN that will be smoothed with a shallow bias.</para>
        /// <para>将使用浅偏置平滑的输入 TIN。</para>
        /// </param>
        /// <param name="_out_tin">
        /// <para>Output TIN</para>
        /// <para>The output smoothed TIN.</para>
        /// <para>输出平滑 TIN。</para>
        /// </param>
        /// <param name="_depth_direction">
        /// <para>Depth Direction</para>
        /// <para><xdoc>
        ///   <para>Specifies how the depth will be captured in the input TIN.</para>
        ///   <bulletList>
        ///     <bullet_item>Positive Up—The depth will be captured in the input TIN. This is default.</bullet_item><para/>
        ///     <bullet_item>Positive Down—The downward depth will be captured in the input TIN.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定如何在输入 TIN 中捕获深度。</para>
        ///   <bulletList>
        ///     <bullet_item>正向上—深度将在输入 TIN 中捕获。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>正向下—向下的深度将被捕获在输入 TIN 中。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// </param>
        /// <param name="_smoothing_iterations">
        /// <para>Smoothing Iterations</para>
        /// <para>The number of smoothing passes that will be performed over the TIN.</para>
        /// <para>将在 TIN 上执行的平滑刀路数。</para>
        /// </param>
        public SmoothBathymetricTIN(object _in_tin, object _out_tin, _depth_direction_value _depth_direction, long? _smoothing_iterations)
        {
            this._in_tin = _in_tin;
            this._out_tin = _out_tin;
            this._depth_direction = _depth_direction;
            this._smoothing_iterations = _smoothing_iterations;
        }
        public override string ToolboxName => "Maritime Tools";

        public override string ToolName => "Smooth Bathymetric TIN";

        public override string CallName => "maritime.SmoothBathymetricTIN";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_in_tin, _out_tin, _depth_direction.GetGPValue(), _smoothing_iterations];

        /// <summary>
        /// <para>Input TIN</para>
        /// <para>The input TIN that will be smoothed with a shallow bias.</para>
        /// <para>将使用浅偏置平滑的输入 TIN。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input TIN")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_tin { get; set; }


        /// <summary>
        /// <para>Output TIN</para>
        /// <para>The output smoothed TIN.</para>
        /// <para>输出平滑 TIN。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output TIN")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_tin { get; set; }


        /// <summary>
        /// <para>Depth Direction</para>
        /// <para><xdoc>
        ///   <para>Specifies how the depth will be captured in the input TIN.</para>
        ///   <bulletList>
        ///     <bullet_item>Positive Up—The depth will be captured in the input TIN. This is default.</bullet_item><para/>
        ///     <bullet_item>Positive Down—The downward depth will be captured in the input TIN.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定如何在输入 TIN 中捕获深度。</para>
        ///   <bulletList>
        ///     <bullet_item>正向上—深度将在输入 TIN 中捕获。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>正向下—向下的深度将被捕获在输入 TIN 中。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Depth Direction")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _depth_direction_value _depth_direction { get; set; }

        public enum _depth_direction_value
        {
            /// <summary>
            /// <para>Positive Up</para>
            /// <para>Positive Up—The depth will be captured in the input TIN. This is default.</para>
            /// <para>正向上—深度将在输入 TIN 中捕获。这是默认设置。</para>
            /// </summary>
            [Description("Positive Up")]
            [GPEnumValue("POSITIVE_UP")]
            _POSITIVE_UP,

            /// <summary>
            /// <para>Positive Down</para>
            /// <para>Positive Down—The downward depth will be captured in the input TIN.</para>
            /// <para>正向下—向下的深度将被捕获在输入 TIN 中。</para>
            /// </summary>
            [Description("Positive Down")]
            [GPEnumValue("POSITIVE_DOWN")]
            _POSITIVE_DOWN,

        }

        /// <summary>
        /// <para>Smoothing Iterations</para>
        /// <para>The number of smoothing passes that will be performed over the TIN.</para>
        /// <para>将在 TIN 上执行的平滑刀路数。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Smoothing Iterations")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public long? _smoothing_iterations { get; set; }


        public SmoothBathymetricTIN SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}